home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / program / tsfaqp34.zip / FAQPAS3.TXT < prev    next >
Internet Message Format  |  1996-09-08  |  57KB

  1. From ts@uwasa.fi Sun Sep 8 00:00:00 1996
  2. Subject: FAQPAS3.TXT contents
  3.  
  4.                                Copyright (c) 1993-1996 by Timo Salmi
  5.                                                  All rights reserved
  6.  
  7. FAQPAS3.TXT The third set of frequently (and not so frequently)
  8. asked Turbo Pascal questions with Timo's answers. The items are in
  9. no particular order.
  10.  
  11. You are free to quote brief passages from this file provided you
  12. clearly indicate the source with a proper acknowledgment.
  13.  
  14. Comments and corrections are solicited. But if you wish to have
  15. individual Turbo Pascal consultation, please post your questions to
  16. a suitable Usenet newsgroup like news:comp.lang.pascal.borland. It
  17. is much more efficient than asking me by email. I'd like to help,
  18. but I am very pressed for time. I prefer to pick the questions I
  19. answer from the Usenet news. Thus I can answer publicly at one go if
  20. I happen to have an answer. Besides, newsgroups have a number of
  21. readers who might know a better or an alternative answer. Don't be
  22. discouraged, though, if you get a reply like this from me. I am
  23. always glad to hear from fellow Turbo Pascal users.
  24.  
  25. ....................................................................
  26. Prof. Timo Salmi   Co-moderator of news:comp.archives.msdos.announce
  27. Moderating at ftp:// & http://garbo.uwasa.fi archives  193.166.120.5
  28. Department of Accounting and Business Finance  ; University of Vaasa
  29. ts@uwasa.fi http://uwasa.fi/~ts BBS 961-3170972; FIN-65101,  Finland
  30.  
  31. --------------------------------------------------------------------
  32. 51) I am running out of memory when compiling my large program.
  33. 52) How do I avoid scrolling in the last column of the last row?
  34. 53) How can one hide (or unhide) a directory using a TP program?
  35. 54) How do I test whether a file is already open in a TP program?
  36. 55) How can I test and convert a numerical string into a real?
  37. 56) How can I reverse a TP .EXE or .TPU back into source code?
  38. 57) How can I calculate the difference between two points of time?
  39. 58) Is a program running stand-alone or from within the IDE?
  40. 59) Please explain Turbo Pascal memory addressing to me.
  41. 60) How do I obtain a bit or bits from a byte, a word or a longint?
  42. 61) What are Binary Coded Decimals? How to convert them?
  43. 62) How can I copy a file in a Turbo Pascal program?
  44. 63) How can I use C code in my Turbo Pascal program?
  45. 64) How do I get started with the Turbo Profiler?
  46. 65) How can I detect if the shift/ctrl/alt etc key is pressed?
  47. 66) How do I get a base 10 logarithm in TP?
  48. 67) If Delay procedure does not work properly, how do I fix it?
  49. 68) How much memory will my TP program require?
  50. 69) How to detect if a drive is a CD-ROM drive?
  51. 70) How do I convert an array of characters into a string?
  52. 71) How do I get started with graphics programming?
  53. 72) Where to I find the different sorting source codes?
  54. 73) A beginner's how to write and compile units.
  55. 74) What are and how do I use pointers?
  56. 75) How can I read another program's errorlevel value in TP?
  57. --------------------------------------------------------------------
  58.  
  59. From ts@uwasa.fi Sun Sep 8 00:00:51 1996
  60. Subject: Out of memory in compiling
  61.  
  62. 51. *****
  63.  Q: I am running out of memory when compiling my large program. What
  64.     can I do?
  65.  
  66.  A: If you are compiling your program from within the IDE (the
  67. Integrated Development Environment) then select the Option from the
  68. main menu, choose the Compiler item and set the Link buffer to
  69. Disk. (Also make the Compile option Destination to be Disk).
  70.    If this is not sufficient, next resort to using the TPC command
  71. line version of the Turbo Pascal compiler instead of the IDE.  Use
  72. the "Link buffer on disk" option.
  73.    Divide your program into units. It is advisable anyway for
  74. modularity when your program size grows.
  75.    If you have extended memory, instead of TURBO.EXE use TPX.EXE, if
  76. you have TP 7.0. If you are into protected mode programming then use
  77. Borland Pascal BP 7.0.
  78.  
  79.  A2: If you would prefer compiling your program from within the IDE
  80. but cannot do it for the above reason (or if you would prefer to
  81. compile your program from within your favorite editor instead of the
  82. TP IDE) you can use the following trick. If your editor has a macro
  83. language like most good editors do, the assign a hotkey macro that
  84. compiles the current file with the TPC. If you are using SemWare's
  85. QEdit editor you'll find such macros in ("Macros and configurations
  86. for QEdit text-editor") ftp://garbo.uwasa.fi/pc/ts/tsqed18.zip and
  87. in ftp://garbo.uwasa.fi/ts/tstse18.zip ("SAL macro sources to extend
  88. The SemWare Editor version 2.5").
  89.    Also your editor must be swapped to disk during the compilation
  90. if memory is critical. There is a very good program for doing that:
  91. ftp://garbo.uwasa.fi/pc/sysutil/shrom24b.zip ("Shell Room, Swap to
  92. disk when shelling to application"). For example I invoke the QEdit
  93. editor with using the following batch:
  94.  c:\tools\shroom -s r:\cmand -z 1024 c:\qedit\q %1 %2 %3 %4 %5 %6 %7
  95. You'll find more about the switches in the Shell Room documentation.
  96. The -s switch designates the swap destination (my r:\cmand directory
  97. is on my ramdisk). The -z switch sets the shell environment size.
  98.   An unfortunate part is that the TP 5.0 Turbo Pascal IDE is about
  99. the only program I know that is not amenable the to Shell Room
  100. utility, so you cannot utilize Shell Room to swap the TP IDE to
  101. disk. Blessfully, at least TP 7.0 no more has this problem.
  102. --------------------------------------------------------------------
  103.  
  104. From ts@uwasa.fi Sun Sep 8 00:00:52 1996
  105. Subject: Last position write woes
  106.  
  107. 52. *****
  108.  Q: How do I avoid scrolling in the last column of the last row?
  109.  
  110.  A: If you use write or writeln at the last column of the last row
  111. (usually 80,25) the screen will scroll. If you wish to avoid the
  112. scrolling you'll have to use an alternative write that does not move
  113. the cursor. Here is a procedure to write without moving the cursor
  114.   uses Dos;
  115.   procedure WriteChar (Character : char; fgColor, bgColor : byte);
  116.   var r : registers;
  117.   begin
  118.     FillChar (r, SizeOf(r), 0);
  119.     r.ah := $09;
  120.     r.al := ord(Character);
  121.     r.bl := (bgColor shl 4) or fgColor;
  122.     r.cx := 1;    { Number of repeats }
  123.     Intr ($10, r);
  124.   end;  (* writechar *)
  125. Thus, if you wish to write to the last column of the last row, you
  126. must first move the cursor to that position. That can be done in
  127. alternative ways. One might get there by having written previously
  128. on the screen (with writeln and write routines) until one is in that
  129. position. Another alternative is using GoToXY(80,20), but then you
  130. have to use the Crt unit. If you don't want to use it, then you can
  131. move the cursor by employing "GOATXY As the ordinary GoToXY but no
  132. Crt unit required" from ftp://garbo.uwasa.fi/pc/ts/tspa3570.zip.
  133.    There is an alternative interrupt service ($0A) which does the
  134. same as service $09, but uses the default colors instead. Just
  135. substitute $0A for $09, and leave the r.bl assignment out of the
  136. WriteChar routine.
  137.    Another option for writing anyhere on the screen without
  138. affecting the cursor is using direct screen writes:
  139.   uses Dos;
  140.   procedure WriteChar (c : char; x, y : byte; fg, bg : byte);
  141.   var vidstart : word;
  142.       regs     : registers;
  143.   begin
  144.     FillChar (regs, SizeOf(regs), 0);
  145.     regs.ah := $0F;
  146.     Intr ($10, regs);  { Color or MonoChrome video adapter }
  147.     if regs.al = 7 then vidstart := $B000 else vidstart := $B800;
  148.     mem[vidstart:((y-1)*80+x-1)*2] := ord(c);
  149.     mem[vidstart:((y-1)*80+x-1)*2+1] := (bg shl 4) or fg;
  150.   end;
  151. To write to the last position simply apply e.g.
  152.   WriteChar ('X', 80, 25, 14, 0);  { Yellow on black }
  153. The foreground (fg) and the background (bg) color codes are
  154.   Black        =   0
  155.   Blue         =   1
  156.   Green        =   2
  157.   Cyan         =   3
  158.   Red          =   4
  159.   Magenta      =   5
  160.   Brown        =   6
  161.   LightGray    =   7
  162.   DarkGray     =   8
  163.   LightBlue    =   9
  164.   LightGreen   =  10
  165.   LightCyan    =  11
  166.   LightRed     =  12
  167.   LightMagenta =  13
  168.   Yellow       =  14
  169.   White        =  15
  170.   Blink        = 128
  171. Yet another option i